package com.brush.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.brush.common.core.domain.entity.SysUser;
import com.brush.common.core.domain.resp.AdminUserResp;
import com.brush.system.domain.req.sysuser.*;
import com.brush.system.domain.resp.sysuser.SysUserResp;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @author 18494
 * @description 针对表【sys_user(用户信息表)】的数据库操作Service
 * @createDate 2024-08-19 10:28:03
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 判断部门是否存在用户
     *
     * @param deptId
     * @return
     */
    boolean checkDeptExistUser(Long deptId);

    PageInfo<SysUserResp> paginationQuery(SysUserReq req);

    /**
     * 根据条件分页查询用户列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
      List<SysUser> selectUserList(SysUserReq user);

    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    AdminUserResp selectUserByUserName(String userName);

    /**
     * 校验用户是否有数据权限
     * @param userId
     */
    void checkUserDataScope(Long userId);

    AdminUserResp selectUserById(Long userId);

    /**
     * 检查用户名是否存在
     * @param userName
     * @param userId
     * @return
     */
    boolean checkUserNameUnique(String  userName,Long userId);

    /**
     * 检查电话号码
     * @param phonenumber
     * @param userId
     * @return
     */
    boolean checkPhoneUnique(String phonenumber, Long userId);

    /**
     * 检查邮箱
     * @param email
     * @param userId
     * @return
     */
    boolean checkEmailUnique(String email, Long userId);

    boolean insertUser(SysUserAddReq user);

    void checkUserAllowed(Long userId);

    boolean updateUser(SysUserEditReq user);

    boolean deleteUserByIds(Long[] userIds);

    /**
     * 用户授权角色
     * @param userId
     * @param roleIds
     * @return
     */
    boolean insertUserAuth(Long userId, Long[] roleIds);

    /**
     * 更改状态
     * @param req
     * @return
     */
    boolean changeStatus(SysUserChangeStatusReq req);

    /**
     * 更改密码
     * @param req
     * @return
     */
    boolean resetPwd(SysUserChangePwdReq req);
}
